﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProtocoloNameSpace;
using Newtonsoft.Json;
using HTSwitchServerNamespace.ar.com.horsetrack;
using HTSwitchServerNamespace.DataMocks;
using System.Net.Sockets;


namespace HTSwitchServerNamespace.Protocols
{
    public class Protocolo_BlackberryGPS : IProtocol
    {
        #region MetodosDatosDispositivo Blackberry
        public bool ObteneryEnviarDatosDelDispositivo(string strMensajeDelDispositivo,TcpClient tcpClient)
        {
            ControlHorseData objContext = new ControlHorseData();
            DataMockBlackberry objGPSBBData = new DataMockBlackberry();
            ar.com.controlyseguimiento.www.ControlYSeguimiento objContextControl = new ar.com.controlyseguimiento.www.ControlYSeguimiento();
            #region Deserializacion de datos
            ///EJEMPLO DE ENVIO {"Id":"BB","Lat":"-34.48894618571428","Lng":"-58.49734540000001","Alt":"0.0","Spe":"0.0","IMEI":"358306040470592","Mail":"controlesyseguimiento@gmail.com"}

            objGPSBBData = JsonConvert.DeserializeObject<DataMockBlackberry>(strMensajeDelDispositivo);
            #endregion

           
            try
            {
                if ((objGPSBBData != null) && (objGPSBBData.Mail != null) && (objGPSBBData.Mail != "Not defined") && (objGPSBBData.Lat != null) && (objGPSBBData.Lng != null))
                {

                    #region Verificacion de plataforma externa
                    DatosPlataformaExt objDataPlataformaExt = new DatosPlataformaExt();
                    if ((objDataPlataformaExt = objContext.IsUsuarioPropio(objGPSBBData.Mail)) != null)
                    {
                        if ((objContext.EnviarDatosPlataformaExterna(objDataPlataformaExt, objGPSBBData.IMEI, objGPSBBData.Lat,objGPSBBData.Lng,objGPSBBData.Spe,objGPSBBData.Alt)) == true)
                        {
                            //throw new Exception("***Usuario De otra Plataforma, Se enviaron los datos correctamente");
                            CLogger.Append("DATOS PLATAFORMA EXTERNA ENVIADOS CORRECTAMENTE", CLogger.INFO);
                            return true;
                        }
                        else
                        {
                            throw new Exception("ERROR ***Usuario De otra Plataforma, FALLO ENVIO DE DATOS");
                        }
                    }
                    #endregion


                    CLogger.Append("*************************NEW PLATFORM********************", CLogger.INFO);

                    #region Validar Nueva plataforma

                    if (objContextControl.ValidateImei(objGPSBBData.IMEI) == true)
                    {
                        //CLogger.Append("Imei encontrado:" + objGPSAndroidData.IMEI, CLogger.INFO);

                        if (objContextControl.IsFirstTimeActivation(objGPSBBData.Mail) == true)  //AVERIGUA SI ES PRIMERA VES PARA ACTIVAR
                        {
                            if (objContextControl.FirstTimeActivation(objGPSBBData.IMEI, objGPSBBData.Mail) == true)  //ACTIVA POR PRIMERA VEZ
                            {
                                CLogger.Append("**NEW PLATFORM** BB Se activa por primera vez el usuario: " + objGPSBBData.Mail + " con IMEI:" + objGPSBBData.IMEI, CLogger.INFO);
                                //CLogger.Append("NOKIA Actualizando usuario con IMEI:" + objGPSNokiaData.IMEI, CLogger.INFO);
                                objContextControl.UpdateCoordinates(objGPSBBData.IMEI,
                                                                    objGPSBBData.Mail,
                                                                    objGPSBBData.Lat,
                                                                    objGPSBBData.Lng,
                                                                    "0",
                                                                    objGPSBBData.Alt,
                                                                    objGPSBBData.Spe,
                                                                   "0"// objGPSBBData.Batt
                                                                    );
                                CLogger.Append("**NEW PLATFORM** BB Actualizo correctamente - Mail: " + objGPSBBData.Mail + " - IMEI:" + objGPSBBData.IMEI, CLogger.INFO);
                            }

                        }
                        else
                        {              //IMEI CORRECTO

                            objContextControl.UpdateCoordinates(objGPSBBData.IMEI,
                                                                objGPSBBData.Mail,
                                                                objGPSBBData.Lat,
                                                                objGPSBBData.Lng,
                                                                "0",
                                                                objGPSBBData.Alt,
                                                                objGPSBBData.Spe,
                                                                "0"//objGPSBBData.Batt
                                                                );
                            CLogger.Append("**NEW PLATFORM** BB Actualizo correctamente - Mail: " + objGPSBBData.Mail + " - IMEI:" + objGPSBBData.IMEI, CLogger.INFO);

                        }
                    }
                    else
                    {
                        CLogger.Append("**NEW PLATFORM** IMEI INVALIDO - IMEI:" + objGPSBBData.IMEI, CLogger.INFO);

                    }
                    #endregion

                }
                else
                {

                    CLogger.Append("**NEW PLATFORM** BB DATOS ENVIADOS INVALIDOS O VACIOS - Mail:" + objGPSBBData.Mail, CLogger.INFO);
                    return false;
                }
            }
            catch (Exception ex)
            {
                //throw new Exception("ERROR EN VALIDACION O CREACION DE NUEVO USUARIO" + objGPSAndroidData.Mail);
                CLogger.Append("**NEW PLATFORM** BB ERROR Excepcion EN NUEVO VALIDATE: " + ex.Message, CLogger.ERROR);
            }






            CLogger.Append("*************************OLD PLATFORM********************", CLogger.INFO);
////////////////////////////////////////////////////////////////////PLATAFORMA VIEJA ///////////////////////////////////////7//
            ///DECLARACION DE VARIABLES
            ar.com.horsetrack.HorsetrackWebService webServiceHandler = new ar.com.horsetrack.HorsetrackWebService();
            HTSwitchServerNamespace.ar.com.horsetrack.DatosGPS objDatosGPS = new HTSwitchServerNamespace.ar.com.horsetrack.DatosGPS();
            
            ///INICIO EL CUERPO DEL PROGRAMA
            try
            {
                if ((objGPSBBData != null) && (objGPSBBData.Mail != null) && (objGPSBBData.Mail != "Not defined") && (objGPSBBData.Lat != null) && (objGPSBBData.Lng != null))
                {
                    if (webServiceHandler.ExisteImei(objGPSBBData.IMEI) == true)
                    {
                        //CLogger.Append("EXISTE IMEI - DEBUG ", CLogger.INFO);
                        objDatosGPS = objContext.ObtenerDatosGpsBB(objGPSBBData);
                    }
                    else
                    {
                        // CLogger.Append("NO EXISTE IMEI - DEBUG ", CLogger.INFO);
                        string[] strClientHost = new string[5];
                        string strMensaje;

                        if (webServiceHandler.ActivarUsuarioPorPrimeraVez(objGPSBBData.Mail, objGPSBBData.IMEI) == true)
                        {
                            CLogger.Append("**OLD PLATFORM** BB ACTIVAR USUARIO EXISTENTE POR PRIMERA VEZ - DEBUG ", CLogger.INFO);

                            objDatosGPS = objContext.ObtenerDatosGpsBB(objGPSBBData);
                            strClientHost[0] = "mail.horsetrack.com.ar";
                            strClientHost[1] = "25";
                            strClientHost[2] = "activaruser@horsetrack.com.ar";
                            strMensaje = "Se Activo el usuario: \n IMEI: " + objGPSBBData.IMEI + "- MAIL: " + objGPSBBData.Mail + "muy correctamente.";
                            try
                            {
                                HTMailSenderNamespace.SimpleAsynchronousExample.MailActivarUsuario(strClientHost, "Se activo usuario", "activaruser@horsetrack.com.ar", strMensaje);
                            }
                            catch (Exception ex)
                            {
                                CLogger.Append("**OLD PLATFORM** ERROR No se pudo enviar mail: " + ex.Message, CLogger.ERROR);
                            }
                        }
                        else
                        {
                            CLogger.Append("**OLD PLATFORM** BB NO EXISTE NI USUARIO NI IMEI - DEBUG ", CLogger.INFO);
                            strClientHost[0] = "mail.horsetrack.com.ar";
                            strClientHost[1] = "25";
                            strClientHost[2] = "activaruser@horsetrack.com.ar";
                            strMensaje = "El usuario IMEI: " + objGPSBBData.IMEI + "- MAIL: " + objGPSBBData.Mail + "- no esta activo, \n Gracias - \n activaruser@horsetrack.com.ar ";

                            try
                            {
                                HTMailSenderNamespace.SimpleAsynchronousExample.MailActivarUsuario(strClientHost, "Activar usuario", "activaruser@horsetrack.com.ar", strMensaje);

                            }
                            catch (Exception ex)
                            {
                                CLogger.Append("**OLD PLATFORM** BB ERROR No se pudo enviar mail: " + ex.Message, CLogger.ERROR);
                            }
                            //throw new Exception("Email - Usuario no registrado");
                            //###//TEMPORAL
                            ; //CREA AUTOMATICAMENTE UN NUEVO USUARIO                            
                            //###//
                            //##// TEMPORAL
                            if (objContext.sendMailDatosdeUsuarioNuevo(objGPSBBData.Mail, objGPSBBData.IMEI) == true) //CREA AUTOMATICAMENTE UN NUEVO USUARIO
                            {
                                objDatosGPS = objContext.ObtenerDatosGpsBB(objGPSBBData);
                            }
                            //throw new Exception("Email - Usuario no registrado");
                        }
                    }

                }
                else
                {

                    CLogger.Append("**OLD PLATFORM** BB DATOS ENVIADOS INVALIDOS O VACIOS - Mail:" + objGPSBBData.Mail, CLogger.INFO);
                    return false;
                }
            }
            catch (Exception ex)
            {
                CLogger.Append("**OLD PLATFORM** ERROR Obteniendo DatosGPS BB: " + ex.Message, CLogger.ERROR);
                throw ex;
            }

            if (webServiceHandler.actualizarDatosGPSenDB(objDatosGPS) == true)  //ACTUALIZACION DATOS EN PLATAFORMA HORSETRACK
            {
                CLogger.Append("**OLD PLATFORM** BB DATOS ACTUALIZADOS CORRECTAMENTE OK", CLogger.ERROR);
            }
            else
            {
                throw new Exception("**OLD PLATFORM** BB NO SE PUDO ACTUALIZAR LA DB DE HORSETRACK");
            }

            return true;
        }
        #endregion


        public ar.com.horsetrack.DatosGPS Parse(DataMockMgr mockObject)
        {
            throw new NotImplementedException();
        }
    }
}



